<?php
declare (strict_types = 1);
namespace app\common\queue\notify;

use app\course\model\base\admin\Course;
use app\course\model\base\admin\CourseStudent;
use app\user\logic\user\SystemNotify;
use think\facade\Request;

// 后台编辑课程课时，购买用户提醒类 	1禁用及恢复、2新增课时、3课时完结更新、4课程编辑、5课时编辑
class CourseNotify
{
    public function run()
    {
        $data = Request::post();
        $func = $this->getMethodArr($data['type']);

        if ( method_exists($this, $func) ) {
        	$this->$func($data);
        }
    }

    // 状态更新
    public function handleStatusNotify($data)
    {
    	// 参数
    	$id 	= $data['source'];
    	$status = $data['value'];
    	// 课程数据
    	$course = app(Course::class)->findOrEmpty($id);
    	if ( $course->isEmpty() ) return;
		// 检查状态（避免频繁切换，如原状态为1，误操作修改为0后又迅速改为1【30秒内】，状态未变，不做任何操作）
    	// $_status 和 $status 不同，表示频繁切换
    	if ( $status != $course->status ) return;
    	// 提醒参数
		$text 	 = $status ? "已经启用，开始学习吧！" : "已被禁用，暂时不能学习了！";
		$is_link = $status ? 1 : 0;
    	$title   = '课程变更';
    	$content = '课程 《' . $course->title . '》 ' . $text;
		// 发送消息
		$this->sendNotify($id, $course->course_type, $title, $content, $is_link);
    }

    // 添加课时
    public function handleAddSecNotify($data)
    {
    	// 参数
    	$id = $data['source'];
		// 课程数据
    	$course = app(Course::class)->findOrEmpty($id);
    	if ( $course->isEmpty() ) return;
    	// 参数
    	$title   = '课时新增';
    	$content = '课程 《' . $course->title . '》 添加了新课时，快去学习吧！';
		// 发送消息
		$this->sendNotify($id, $course->course_type, $title, $content);
    }

    // 课时完结
    public function handleSecDoneNotify($data)
    {
    	// 参数
    	$id = $data['source'];
		// 课程数据
    	$course = app(Course::class)->findOrEmpty($id);
    	if ( $course->isEmpty() ) return;
    	// 参数
    	$title   = '课程完结';
    	$content = '课程 《' . $course->title . '》 课时已更新完结，快去学习吧！';
		// 发送消息
		$this->sendNotify($id, $course->course_type, $title, $content);
    }

    // 课程编辑
    public function handleEditCourseNotify($data)
    {
    	
    }

    // 课时编辑
    public function handleEditSecNotify($data)
    {

    }

    // 发送消息
    public function sendNotify($id, $course_type, $title, $content, $is_link = 1)
    {
    	// 课程类型
		$type = $this->getCourseTypeAttr($course_type);
		//购买课程的用户
		$users = app(CourseStudent::class)->where('course_id', $id)->column('user_id');
		// 提醒参数
		$param 		= [
			'title' 		 => $title,
			'content' 		 => $content,
			'notify_type' 	 => 1,	// 1课程提醒 0系统消息
			'is_link' 		 => $is_link,
			'link_data_type' => $type,
			'link_data_id' 	 => $id,
		];
		// 组合数据
		$params = [];
		foreach ($users as $user) {
			$params[] = array_merge(['user_id' => $user], $param);
		}
		// 发送系统消息
		app(SystemNotify::class)->saveAll($params);
    }

    // 课程类型数组
    public function getCourseTypeAttr($course_type): string
    {
		$type = [
			1 => 'video',
			2 => 'live',
			3 => 'offline',
			4 => 'classes',
		];
        return $type[$course_type];
    }

    public function getMethodArr($type = 1): string
    {
    	$methods = [
        	1 => 'handleStatusNotify',
        	2 => 'handleAddSecNotify',
        	3 => 'handleSecDoneNotify',
        	4 => 'handleEditCourseNotify',
        	5 => 'handleEditSecNotify',
        ];
        return $methods[$type];
    }
}
